/**
 * @file
 * @author  Tsin Smith <tsin.creator@gmail.com>
 *
 * @section DESCRIPTION
 *
 */

#ifndef __TSIN_LIBRARY_GAME_HPP__
#define __TSIN_LIBRARY_GAME_HPP__

#include <tsin/library/GameViewport.hpp>
#include <tsin/util/Resolution.hpp>

namespace tsin {

        class Front;
        class GameEvent;

        /**
         * @class Game
         * @brief The most abstract description of a game.
         */
        class Game
        {
        public:
                /**
                 * @brief Get the name of the game in C-style string
                 */
                virtual const char *getName() = 0;

                virtual const StandardResolution getResolution() = 0;

                /**
                 * @name Overall Layout
                 */
                //@{

                /**
                 * @brief Get number of view ports of the game.
                 */
                virtual int getNrViewport() = 0;

                /**
                 * @brief Get a specific view port.
                 *
                 * @param idx The index whose valid range is from 0 to
                 *            getNrViewport()-1
                 * @return The view port if idx is valid or NULL otherwise.
                 */
                virtual GameViewport *getViewport(int idx) = 0;

                //@} Overall Layout

                /**
                 * @name Front Information
                 */
                // @{
                virtual const char *getFrontImagePath() = 0;

                virtual Front *getFront() = 0;
                // @} Front Information

                virtual int getEvents(GameEvent **events) = 0;
        };

}

#endif /* __TSIN_LIBRARY_GAME_HPP__ */
